package cn.tanghom.app.oa.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.flowable.task.api.Task;
import org.springframework.data.jpa.domain.AbstractPersistable;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;

import com.unbiz.common.convert.primitive.IntegerConverter;

import lombok.Data;

/**
 * 岗位信息
 *
 * @author tanghom<tanghom@qq.com> 2016/4/24
 */
@Data
// @Entity
// @Table(name = "t_position")
@Document(collection = "recruitment_needs")
public class Position extends AbstractPersistable<Long> {
	private static final long serialVersionUID = -815502896516610406L;

	private String title; // 职位名称
	
	@Field("tid")
	private Long depId;

	// 所属部门ID
	@Field("pname1")
	private String depName; // 所属部门Name

	@Field("pname0")
	private String titleId; // 二级职能
	
	private Long  subTitleId; // 三级职能
	
	private String email; // 邮箱组
	private String jobDescription;// 描述
	private String jobRequirement; // 职位要求

	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
	private Date createTime;// 新建时间
	
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
	private Date updateTime; // 更新时间
	
	@DateTimeFormat(pattern="yyyy-MM-dd") 
	private Date startTime; // 启动日期，背锅inline
	
	@DateTimeFormat(pattern="yyyy-MM-dd") 
	private Date endTime; // 关闭时间，deadline
	
	private int status = 2;// 状态:0、禁用；1、正常；2、待审核, 默认：2、待审核

	// 以下为职位招聘信息
	private int annualSalary; // 年薪

	private int min_show_annual_salary;
	private int max_show_annual_salary;

	private String salaryDescription;

	int degree_required;

	int gender_required;

	int work_exp_required;

	private String age_required;
	
	private String language_required;

	private String certificate;

	private int cityId;
	private int countryId;

	@Field("uid")
	private Long userId; // 所属HR ID		

	private int headCount = 1; // 招聘人数

	private long companyId; //招聘企业

	private Integer industryId;

	private String important_msg;
	
	private String processInstanceId; // 运行中的流程实例ID

	// 流程任务
	@Transient
	private transient Task task;	
	
	public Position(){		
	}
	
	public Position(Long id){
		this.setId(id);
	}
	
	public void setId(final Long id) {
		super.setId(id);
	}
	public int getMinAgeRequred(){
		if(age_required==null || age_required.equals("不限") || age_required.indexOf("以下")>0){
			return 0;
		}
		try{
			int pos = age_required.indexOf('-');
			if(pos>0){
				return IntegerConverter.parseInt(age_required);
			}
			return 0;
		}
		catch(Exception e){
			return 0;
		}
		
	}
	
	public int getMaxAgeRequred(){
		if(age_required==null || age_required.equals("不限") || age_required.indexOf("以上")>0 ){
			return 1000;
		}
		try{
			int pos = age_required.indexOf('-');
			if(pos>0){
				return IntegerConverter.parseInt(age_required.substring(pos+1));
			}
			return IntegerConverter.parseInt(age_required);
		}
		catch(Exception e){
			return 0;
		}
		
	}
	

    public boolean isDegreeMatch(Integer tDegreeId) {
    	int pDegreeId = this.degree_required;
        if(pDegreeId <= 0){
            return true;
        }
        if(tDegreeId == null) {
            return false;
        }
        /**
         * 人才学历 
         *  1 本科 
         *  3 硕士 
         *  4 博士 
         *  5 博士后 
         *  6 MBA 
         *  8 大专
         * 
         * 职位
         *  0 不限 
         *  1 专科及以上 
         *  2 本科及以上 
         *  5 非统招本科及以上 
         *  3 硕士及以上 
         *  6 非统招硕士及以上 
         *  4 博士及以上
         * 
         * 
         * 
         *  新版本
         *  <option value="0">不限</option>
            <option value="1">专科及以上</option>
            <option value="2">统招本科及以上</option>
            <option value="5">非统招本科及以上</option>
            <option value="3">统招硕士及以上</option>
            <option value="6">非统招硕士及以上</option>
            <option value="4">博士及以上</option>
         */

        switch (pDegreeId) {
            case 0:
                return true;
            case 1:// 1 专科及以上
                return tDegreeId > 0;
                
            case 2://2 本科及以上
                return tDegreeId >= 1 && tDegreeId <= 6;
            case 5://2 非统招 本科及以上
                return tDegreeId >= 1 && tDegreeId <= 6;

            case 3://3 硕士及以上
                return tDegreeId >= 3 && tDegreeId <= 6;
            case 6://3 非统招 硕士及以上
                return tDegreeId >= 3 && tDegreeId <= 6;
                
            case 4:// 4 博士及以上
                return tDegreeId == 4 || tDegreeId == 5;
                
            default:
                return true;
        }
    }
}
